/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarCambioCarrera;

import entidad.Parametro;
import wasolicitudesfiec.CambioCarreraoEspecializacion.ResultadoEvaluacion;
import entidad.cambioCarrera.Solicitudcambiocarrera;
import hero.interfaces.BnNodeValue;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;

/**
 *
 * @author Administrador
 */
public class CTRL_ResultadoEvaluacion extends CTRL_Base {

    private ResultadoEvaluacion gui;
    private String nombreActividad = "";

    public CTRL_ResultadoEvaluacion(ResultadoEvaluacion gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
            System.out.println("CTRL_ResultadoEvaluacion Instancia init: " + instancia);
        }
    }

    public void inicializar() throws MensajeException {
        String nombreInstancia;
        Solicitudcambiocarrera solicitudCambio;
        String carrera="";
        String especializacion ="";
        Parametro parametroCarrera;
        try {
            if (prjSession == null) {
                throw new Exception();
            }
            nombreInstancia = getNombreInstanciaProceso();
            if (nombreInstancia == null) {
                throw new Exception();
            }
            prjSession.initProject(nombreInstancia);
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty("idSolicitudProceso").getTheValue());
            solicitudCambio = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
            
             if (solicitudCambio.getCarreraNueva().getFkIdParent() == 0) {
                 carrera =solicitudCambio.getCarreraNueva().getNombre();
               especializacion="Sin especializacion";
            } else {
                parametroCarrera = logica.leerParametro(solicitudCambio.getCarreraNueva().getFkIdParent());
                carrera=parametroCarrera.getNombre();
                especializacion=solicitudCambio.getCarreraNueva().getNombre();       
            }
            if (solicitudCambio.getResultadoEvaluacion().equals("Aprobado")) {
                nombreActividad = "Solicitud Aprobada";
                gui.getStResultado().setText("Su solicitud de cambio ha sido aprobada");
                gui.getLblCarrera().setText("Se ha aprobado el cambio "+carrera+" "+especializacion);
            }
            if (solicitudCambio.getResultadoEvaluacion().equals("NoAprobado")) {
                nombreActividad = "Solicitud No Aprobada";
                gui.getStResultado().setText("Su solicitud de cambio no ha sido aprobada");
            }
            gui.getPanelNavegacion().getLblNavegacion().setText("Solicitud Cambio de Carrera/Especialización" + " -> " + "Resultado Evaluacion");            
            gui.getTxtObservacionCoordinador().setText(solicitudCambio.getObservacionCoordinador());
            gui.getTxtObservacionSubDecano().setText(solicitudCambio.getObservacionSubDecano());

        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
             Logger.getLogger(CTRL_ResultadoEvaluacion.class.getName()).log(Level.SEVERE, null, exception);       
        
            throw new MensajeException("No es posible iniciar la solicitud. Por favor, intente luego de unos minutos.");
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        System.out.println("CTRL_ResultadoEvaluacion ->instancia: " + instancia);
        return instancia;
    }

    public void realizarActividad() throws MensajeException {
        String nombreInstancia;
        BnNodeValue actividad;
        Solicitudcambiocarrera solicitud;
        try {
            if (!(usrSession != null && prjSession != null)) {
                throw new Exception();
            }
            nombreInstancia = getNombreInstanciaProceso();
            prjSession.initProject(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty("idSolicitudProceso").getTheValue());
            solicitud = logica.getLogCambioCarrera().leerSolicitudCambio(idSolicitud);
            solicitud = logica.getLogCambioCarrera().clonarSolicitudAyudantia(solicitud);
            prjSession.setNodeProperty(nombreActividad, "idSolicitudActividad", solicitud.getIdSolicitudCambioCarrera() + "");
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
             Logger.getLogger(CTRL_ResultadoEvaluacion.class.getName()).log(Level.SEVERE, null, ex);               
            throw new MensajeException("No es posible guardar los datos de la solicitud. Por favor, intente luego de unos minutos.");
        }
    }
}
